home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Graphics / NXPlot3d / Source / exprDefs.h < prev    next >
Text File  |  1993-10-12  |  2KB  |  76 lines

  1.  
  2. /*
  3.     exprDefs.h
  4.  
  5.     Private defs used by Expression and the parsing modules.
  6. */
  7.  
  8. #import "Expression.h"
  9.  
  10. /* a type of function term we know how to parse */
  11. typedef struct _Function {
  12.     char *name;
  13.     int minArgs;
  14.     int maxArgs;
  15.     EXPTermEvalFunc *evalFunc;
  16. } Function;
  17.  
  18. typedef enum {        /* various types of terms we know about */
  19.     constantTerm = 1,
  20.     varTerm = 2,
  21.     vectorTerm = 4,
  22.     binOpTerm = 8,
  23.     funcTerm = 16
  24. } TermTag;
  25.  
  26. /* a term of an expression.
  27.    Note that even if a constant is an integer, we store it as a float.  This
  28.    ensures that divide by zero results in NaN ("not a number", a special
  29.    floating point value) instead of a coredump due to an arithmetic exception.
  30.  */
  31. typedef struct _EXPTerm {
  32.     TermTag tag;        /* type of term */
  33.     union {
  34.     struct {
  35.         BOOL isInt;        /* is this an integer? */
  36.         float val;        /* the constant value */
  37.     } constant;
  38.     struct {
  39.         char *name;        /* name of var */
  40.         float val;        /* value of var */
  41.     } var;
  42.     struct {
  43.         BOOL hasRange;    /* do we calc the vector or the range? */
  44.         BOOL changed;    /* do we need to recalc? */
  45.         short dimension;    /* dimension within which we vary */
  46.         char *name;        /* name of var */
  47.         int resolution;    /* last resolution we calc'ed at */
  48.         float min;        /* range of values */
  49.         float max;
  50.         float *vals;    /* list of values */
  51.     } vector;
  52.     struct {
  53.         char op;        /* char representing op (e.g. '+', '-',...) */ 
  54.     } binOp;
  55.     struct {
  56.         Function *type;    /* info for this type of function */
  57.     } func;
  58.     } data;
  59.     int numSubterms;        /* number of subTerms from parse */
  60.     struct _EXPTerm *subterms[1];    /* the subTerms */
  61. } Term;
  62.  
  63.  
  64. typedef struct _TermList {    /* a list of terms */
  65.     int num;
  66.     Term *terms[1];
  67. } TermList;
  68.  
  69.  
  70. /* declaration of functions shared between the parsing modules */
  71.  
  72. extern Term *_EXPAllocTerm(NXZone *zone, TermTag tag, int numSubterms, ...);
  73. extern void _EXPFreeTerm(void *info, Term *data);
  74. extern BOOL _EXPParseExpression(const char *text, NXHashTable *validTerms, Term **parseTree, NXHashTable *varTerms, NXZone *zone);
  75. extern void _EXPPrepareToScan(const char *text);
  76.